#!/usr/bin/perl

# Copyright (c) 2007, Gea-Suan Lin
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
#
#     * Redistributions of source code must retain the above copyright
#       notice, this list of conditions and the following disclaimer.
#     * Redistributions in binary form must reproduce the above
#       copyright notice, this list of conditions and the following
#       disclaimer in the documentation and/or other materials provided
#       with the distribution.
#     * Neither the name of Pixnet nor the names of its contributors
#       may be used to endorse or promote products derived from this
#       software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

use Getopt::Std;
use SOAP::Lite;
use YAML::Syck;
use strict;
use warnings;

my ($conf, $sid);
my %opts;

processOptions();
loadConf();
main();

sub faulthandler
{
    my ($soap, $res) = @_;

    my $errmsg = "SOAP Fault: " . $res->faultdetail->{code} . ": " . $res->faultdetail->{message};
    if (defined $res->faultdetail->{trigger}) {
	$errmsg .= ", Trigger: " . $res->faultdetail->{trigger};
    }
    if (defined $res->faultdetail->{triggerDetails}) {
	$errmsg .= ", TriggerDetails: " . $res->faultdetail->{triggerDetails};
    }

    die $errmsg;
}

sub loadConf
{
    # Load config
    $conf = LoadFile("config.yaml");
}

sub main
{
    my $sc = SOAP::Lite->service($conf->{wsdlhost} . "/api/adsense/v2/AccountService?wsdl");
    $sc->autotype(0);

    $sc->on_fault(\&faulthandler);

    # Header
    my @hdrs = (
	soaphdr("developer_email", $conf->{devname}),
	soaphdr("developer_password", $conf->{devpass}),
	soaphdr("client_id", $sid),
	);

    # AdSense parameters
    my $synServiceTypes = ["ContentAds", "SearchAds", "ReferralAds"];

    # Call
    my $synServiceData = $sc->addSyndicationService($synServiceTypes, @hdrs);
}

sub processOptions
{
    getopts("t", \%opts);

    $sid = $ARGV[0] or die "You need to specify syndication id";
}

sub soaphdr
{
    my $k = shift;
    my $v = shift;

    return SOAP::Header->name($k)->value($v)->uri($conf->{namespace})->prefix("impl");
}

__END__
